當我們要一次操作多個變數時,逐一宣告並使用會使程式碼顯得冗長,例如要計算多個變數的平方:
>>> a0 = 2
>>> a1 = 3
>>> a2 = 5
>>>
>>> a0 *= a0
>>> a1 *= a1
>>> a2 *= a2
>>>
>>> a0, a1, a2
(4, 9, 25)
在 Python 裡面可以將多個元素放在一個列表 (List) 裡面,結合 for
迴圈之類的來逐一操作,宣告的方式如下:
arr = [2, 3, 5]
用中括號 []
將元素們夾起來,元素之間彼此用逗號 ,
隔開,在這個列表裡面,分別有 2, 3, 5 這三個元素。列表可以直接用 print()
一次輸出:
>>> print(arr)
[2, 3, 5]
也可以用 for
迴圈把列表裡面的元素一個一個印出來:
>>> for a in arr:
>>> print(a)
2
3
5
在 for
迴圈裡面,a
會逐一代表列表裡面的元素,這個逐一取出並使用的動作,被稱為迭代 (Iteration)。在迭代的過程,可以進行不同的操作:
>>> for a in arr:
>>> print(a * a)
4
9
25
如果想要修改某個元素的內容,可以用像這樣指定索引值 (Index) 來修改:
>>> arr[0] = 7
>>> print(arr)
[7, 3, 5]
以整數列表而言,在迴圈中修改變數 a
並不會導致 arr
的內容改變:
>>> arr = [2, 3, 5]
>>> for a in arr:
>>> a = a * a
>>> print(a)
>>> print(arr)
4
9
25
[2, 3, 5]
雖然 a
依序被變成 4, 9, 25,但是 arr
的內容依然是 [2, 3, 5]
。如果想要在迴圈裡面修改列表的值,有兩種方法,第一種是透過 range()
來列舉列表的索引值:
>>> arr = [2, 3, 4]
>>> for i in range(len(arr)):
>>> arr[i] = arr[i] * arr[i]
>>> print(arr[i])
>>> print(arr)
4
9
16
[4, 9, 16]
列表的索引值是從 0 開始算的,因此列表內的第一個元素是 arr[0]
,第二個元素是 arr[1]
。而 len(arr)
可以取得 arr
的大小,在這裡 len(arr)
會是 3。因此 range(len(arr))
會依序回傳 0, 1, 2,剛好可以對應到列表內每個元素的索引值。
第二種是搭配 enumerate()
函式來使用:
>>> arr = [2, 3, 4]
>>> for i, a in enumerate(arr):
>>> arr[i] = a * a
>>> print(arr[i])
>>> print(arr)
4
9
16
[4, 9, 16]
enumerate()
函式會回傳該元素的索引值以及元素本身,因此 a
的值一開始會是 arr[i]
的值,但是 a
與 arr[i]
依然是獨立的兩個變數,所以只修改 a
同樣不會影響 arr
的內容:
>>> arr = [2, 3, 4]
>>> for i, a in enumerate(arr):
>>> a = a * a
>>> print(arr[i], a)
>>> print(arr)
2 4
3 9
4 16
[2, 3, 4]
執行完這個迴圈後,arr
依然是原本的 [2, 3, 4]
。
寫一個函式 sum_of_list()
傳入一個列表,計算這個列表的總和。
完整的程式碼放在此 Colab 裡面供各位參考。